package main.技巧;

/**
 * @author tmh
 * @date 2024/7/25 16:31
 * @description 任何数与自身异或的结果为0：即 ( a \oplus a = 0 )。
 * 任何数与0异或的结果为其本身：即 ( a \oplus 0 = a )。
 * 异或运算具有交换性和结合性：即 ( a \oplus b = b \oplus a ) 和 ( a \oplus (b \oplus c) = (a \oplus b) \oplus c )。
 */
public class T136只出现一次的数字 {
    public int singleNumber(int[] nums) {
        //使用异或，最后得到的结果就是只出现了一次的数字
        int len = nums.length;
        int single = nums[0];
        if (len == 1) {
            return single;
        } else {
            //利用异或的性质
            for (int i = 1; i < nums.length; i++) {
                single ^= nums[i];
            }
        }
        return single;
    }
}
